package cl.tinet.trainee.salas.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.Query;

import cl.tinet.trainee.salas.model.ReservaSala;
import cl.tinet.trainee.salas.model.Sala;

/**
 * 
 * Clase que contiene las instrucciones DAO del objeto tipo Sala.
 * 
 * @author Naht-Sams
 */
public class SalaDao implements SalaDaoInterfaz {
    /**
     * Entity Manager.
     */
    private EntityManager em;

    /**
     * 
     * Constructor.
     * 
     * @param em
     *            Entidad.
     */
    public SalaDao(EntityManager em) {
        super();
        this.em = em;
    }

    /**
     * {@inheritDoc}
     */
    public void agregarSala(Sala sala) {
        em.persist(sala);
    }

    /**
     * {@inheritDoc}
     */
    public void modificarSala(Sala sala) {
        em.persist(sala);
    }

    /**
     * {@inheritDoc}
     */
    public void borrarSala(Sala sala) {
        em.remove(sala);
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public List<Sala> buscarListaSalas() {
        String sql = "SELECT s from Sala s";
        Query q = em.createQuery(sql);
        List<Sala> listaSalas = q.getResultList();
        return listaSalas;
    }

    /**
     * {@inheritDoc}
     */
    public Sala buscarSalaAntesDeCrear(Sala datosSala) {
        Sala sala;
        try {
            sala = buscarSala(datosSala);
        } catch (NoResultException e) {
            // hacer logger.
            return null;
        }
        return sala;
    }

    /**
     * {@inheritDoc}
     */
    public Sala buscarSala(Sala datosSala) {
        Sala sala;
        sala = null;
        String sql = "SELECT s from Sala s where cod_sala=:codSala";
        Query q = em.createQuery(sql);
        q.setParameter("codSala", datosSala.getCodSala());
        sala = (Sala) q.getSingleResult();
        return sala;
    }

    /** {@inheritDoc} */
    @SuppressWarnings("unchecked")
    public List<ReservaSala> buscarReservaSalas(Sala sala) {
        List<ReservaSala> listaSala;
        listaSala = null;
        String sql =
                "SELECT rs from ReservaSala rs where cod_sala_reserva=:codSala";
        Query q = em.createQuery(sql);
        q.setParameter("codSala", sala.getCodSala());
        listaSala = (List<ReservaSala>) q.getResultList();
        return listaSala;
    }
}
